home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / src / Rkm_asm.lha / Assembly_Codes / OS_Sources / Devices / Joystick.s < prev    next >
Text File  |  1992-09-02  |  7KB  |  477 lines

  1.  
  2.     INCDIR    WORK:Include/
  3.  
  4.     INCLUDE    exec/exec_lib.i
  5.     INCLUDE    exec/memory.i
  6.     INCLUDE    intuition/intuition_lib.i
  7.     INCLUDE    intuition/intuition.i
  8.     INCLUDE    graphics/graphics_lib.i
  9.     INCLUDE    graphics/text.i
  10.     INCLUDE dos/dos_lib.i
  11.     INCLUDE dos/dos.i
  12.     INCLUDE    devices/input.i
  13.  
  14.     INCLUDE    misc/easystart.i
  15.  
  16. LIB_VER        EQU    37
  17. FILE_SIZE    EQU    100
  18. TRUE        EQU    -1
  19. FALSE        EQU    0
  20.  
  21.     moveq    #LIB_VER,d0
  22.     lea    int_name(pc),a1
  23.     move.l    4.w,a6
  24.     jsr    _LVOOpenLibrary(a6)
  25.     move.l    d0,_IntuitionBase
  26.     beq    exit_quit
  27.  
  28.     moveq    #LIB_VER,d0
  29.     lea    graf_name(pc),a1
  30.     jsr    _LVOOpenLibrary(a6)
  31.     move.l    d0,_GfxBase
  32.     beq    exit_closeint
  33.  
  34.     moveq    #LIB_VER,d0
  35.     lea    dos_name(pc),a1
  36.     jsr    _LVOOpenLibrary(a6)
  37.     move.l    d0,_DOSBase
  38.     beq    exit_closegfx
  39.  
  40.     lea    wndwdefs(pc),a0
  41.     CALLINT    OpenWindow
  42.     move.l    d0,wndwptr
  43.     beq    exit_closedos
  44.  
  45.     move.l    wndwptr(pc),a0
  46.     CALLINT    ViewPortAddress
  47.     move.l    d0,vpptr
  48.  
  49.     move.l    wndwptr(pc),a0
  50.     move.l    wd_RPort(a0),a0
  51.     move.l    a0,wndwrp
  52.  
  53.     moveq    #FILE_SIZE,d0
  54.     move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  55.     CALLEXEC    AllocMem
  56.     move.l    d0,bytebuf
  57.     beq    exit_closewindow
  58.  
  59.     CALLGRAF    WaitTOF
  60.  
  61. mainloop
  62.     move.l    wndwptr(pc),a0
  63.     move.l    wd_UserPort(a0),a0
  64.     move.l    4.w,a6
  65.     jsr    _LVOGetMsg(a6)
  66.     tst.l    d0
  67.     beq    checkjoystick
  68.     move.l    d0,a1
  69.     move.l    im_Class(a1),iclass
  70.     move.w    im_Code(a1),icode
  71.     move.w    im_Qualifier(a1),iqual
  72.     move.l    im_IAddress(a1),iadr
  73.     move.w    im_MouseX(a1),msex
  74.     move.w    im_MouseY(a1),msey
  75.     jsr    _LVOReplyMsg(a6)
  76.  
  77.     cmp.l    #IDCMP_VANILLAKEY,iclass
  78.     bne    check_mouse
  79.  
  80.     cmp.w    #$41,icode
  81.     bne    check_mouse
  82.  
  83.  * Press A so that the mouse uses the joysick port.
  84.  
  85.     CALLEXEC    CreateMsgPort
  86.     move.l    d0,mouseport
  87.     beq    exit_closedos
  88.     move.l    d0,a0
  89.     moveq    #IOSTD_SIZE,d0
  90.     CALLEXEC    CreateIORequest
  91.     move.l    d0,mouseio
  92.     beq.s    exit_mouseport
  93.     move.l    d0,a1
  94.     lea    ip_name(pc),a0
  95.     moveq    #0,d0
  96.     moveq    #0,d1
  97.     CALLEXEC    OpenDevice
  98.     tst.l    d0
  99.     bne.s    exit_mouseio
  100.  
  101.     movea.l    mouseio(pc),a1
  102.     move.w    #IND_SETMPORT,IO_COMMAND(a1)
  103.     move.l    #byte1,IO_DATA(a1)
  104.     move.l    #1,IO_LENGTH(a1)
  105.     CALLEXEC    DoIO
  106.  
  107. exit_closedevice
  108.     move.l    mouseio(pc),a1
  109.     CALLEXEC    CloseDevice
  110.  
  111. exit_mouseio
  112.     move.l    mouseio(pc),a0
  113.     CALLEXEC    DeleteIORequest
  114.  
  115. exit_mouseport
  116.     move.l    mouseport(pc),a0
  117.     CALLEXEC    DeleteMsgPort
  118.  
  119.  
  120. check_mouse
  121.  
  122.     lea    blankstg(pc),a0
  123.  
  124.     cmp.l    #IDCMP_MOUSEMOVE,iclass
  125.     move.w    #100,d0
  126.     move.w    #26,d1
  127.     move.l    wndwrp(pc),a1
  128.     CALLGRAF Move
  129.  
  130. checkm_n
  131.     cmp.w    #0,msex
  132.     bne.s    checkm_e
  133.     cmp.w    #0,msey
  134.     bge.s    checkm_e
  135.     lea    nstg(pc),a0
  136.     bra    print_mdirection
  137.  
  138. checkm_e
  139.     cmp.w    #0,msex
  140.     ble.s    checkm_s
  141.     cmp.w    #0,msey
  142.     bne.s    checkm_s
  143.     lea    estg(pc),a0
  144.     bra    print_mdirection
  145.  
  146. checkm_s
  147.     cmp.w    #0,msex
  148.     bne.s    checkm_w
  149.     cmp.w    #0,msey
  150.     ble.s    checkm_w
  151.     lea    sstg(pc),a0
  152.     bra    print_mdirection
  153.  
  154. checkm_w
  155.     cmp.w    #0,msex
  156.     bge.s    checkm_ne
  157.     cmp.w    #0,msey
  158.     bne.s    checkm_ne
  159.     lea    wstg(pc),a0
  160.     bra.s    print_mdirection
  161.  
  162. checkm_ne
  163.     cmp.w    #0,msex
  164.     ble.s    checkm_se
  165.     cmp.w    #0,msey
  166.     bge.s    checkm_se
  167.     lea    nestg(pc),a0
  168.     bra.s    print_mdirection
  169.  
  170. checkm_se
  171.     cmp.w    #0,msex
  172.     ble.s    checkm_sw
  173.     cmp.w    #0,msey
  174.     ble.s    checkm_sw
  175.     lea    sestg(pc),a0
  176.     bra.s    print_mdirection
  177.  
  178. checkm_sw
  179.     cmp.w    #0,msex
  180.     bge.s    checkm_nw
  181.     cmp.w    #0,msey
  182.     ble.s    checkm_nw
  183.     lea    swstg(pc),a0
  184.     bra.s    print_mdirection
  185.  
  186. checkm_nw
  187.     cmp.w    #0,msex
  188.     bge.s    unknown_mdirection
  189.     cmp.w    #0,msey
  190.     bge.s    unknown_mdirection
  191.     lea    nwstg(pc),a0
  192.     bra.s    print_mdirection
  193.  
  194. unknown_mdirection
  195.     lea    unknownstg(pc),a0
  196.  
  197. print_mdirection
  198.     moveq    #10,d0
  199.     move.l    wndwrp(pc),a1
  200.     CALLGRAF    Text
  201.  
  202.     cmp.l    #IDCMP_MOUSEBUTTONS,iclass
  203.     bne.s    no_buttons
  204.     move.w    #100,d0
  205.     move.w    #46,d1
  206.     move.l    wndwrp(pc),a1
  207.     CALLGRAF Move
  208.     lea    blankstg(pc),a0
  209.     cmp.w    #SELECTDOWN,icode
  210.     bne.s    checkm_mmb
  211.     lea    lmbstg(pc),a0
  212.     bra.s    print_button
  213.  
  214. checkm_mmb
  215.     cmp.w    #MIDDLEDOWN,icode
  216.     bne.s    checkm_rmb
  217.     lea    mmbstg(pc),a0
  218.     bra.s    print_button
  219.  
  220. checkm_rmb
  221.     cmp.w    #MENUDOWN,icode
  222.     bne.s    unknown_button
  223.     lea    rmbstg(pc),a0
  224.     bra.s    print_button
  225.  
  226. unknown_button
  227.     lea    unknownstg(pc),a0
  228.  
  229. print_button
  230.     moveq    #10,d0
  231.     move.l    wndwrp(pc),a1
  232.     CALLGRAF    Text
  233.  
  234. no_buttons
  235.  
  236.     cmp.l    #IDCMP_CLOSEWINDOW,iclass
  237.     beq    exit_freemem
  238.  
  239. checkjoystick
  240.  
  241.     moveq    #0,d1
  242.     moveq    #0,d2
  243.     moveq    #0,d3
  244.     moveq    #0,d4
  245.  
  246.     move.l    #$DFF00A,a1
  247.     move.w    (a1),d1
  248.  
  249.     move.l    #$DFF00C,a2
  250.     move.w    (a2),d2
  251.  
  252.     move.l    #$BFE001,a3
  253.     move.b    (a3),d3
  254.  
  255.     move.w    d2,d4
  256.  
  257.     move.w    #16,d0
  258.     move.w    #26,d1
  259.     move.l    wndwrp,a1
  260.     CALLGRAF Move
  261.     lea    blankstg(pc),a0
  262.  
  263. checkj_n
  264.     btst    #1,d4
  265.     bne.s    checkj_ne
  266.     btst    #8,d4
  267.     beq.s    checkj_ne
  268.     btst    #9,d4
  269.     bne.s    checkj_ne
  270.     lea    nstg(pc),a0
  271.     bra    print_jdirection
  272.  
  273. checkj_ne
  274.     btst    #1,d4
  275.     beq.s    checkj_e
  276.     btst    #8,d4
  277.     beq.s    checkj_e
  278.     btst    #9,d4
  279.     bne.s    checkj_e
  280.     lea    nestg(pc),a0
  281.     bra    print_jdirection
  282.  
  283. checkj_e
  284.     btst    #0,d4
  285.     beq.s    checkj_se
  286.     btst    #1,d4
  287.     beq.s    checkj_se
  288.     btst    #8,d4
  289.     bne.s    checkj_se
  290.     btst    #9,d4
  291.     bne.s    checkj_se
  292.     lea    estg(pc),a0
  293.     bra.s    print_jdirection
  294.  
  295. checkj_se
  296.     btst    #0,d4
  297.     bne.s    checkj_s
  298.     btst    #1,d4
  299.     beq.s    checkj_s
  300.     lea    sestg(pc),a0
  301.     bra.s    print_jdirection
  302.  
  303. checkj_s
  304.     btst    #0,d4
  305.     beq.s    checkj_sw
  306.     btst    #1,d4
  307.     bne.s    checkj_sw
  308.     btst    #9,d4
  309.     bne.s    checkj_sw
  310.     lea    sstg(pc),a0
  311.     bra.s    print_jdirection
  312.  
  313. checkj_sw
  314.     btst    #0,d4
  315.     beq.s    checkj_w
  316.     btst    #1,d4
  317.     bne.s    checkj_w
  318.     btst    #9,d4
  319.     beq.s    checkj_w
  320.     lea    swstg(pc),a0
  321.     bra.s    print_jdirection
  322.  
  323. checkj_w
  324.     btst    #0,d4
  325.     bne.s    checkj_nw
  326.     btst    #1,d4
  327.     bne.s    checkj_nw
  328.     btst    #8,d4
  329.     beq.s    checkj_nw
  330.     btst    #9,d4
  331.     beq.s    checkj_nw
  332.     lea    wstg(pc),a0
  333.     bra.s    print_jdirection
  334.  
  335. checkj_nw
  336.     btst    #8,d4
  337.     bne.s    unknown_jdirection
  338.     btst    #9,d4
  339.     beq.s    unknown_jdirection
  340.     lea    nwstg(pc),a0
  341.     bra.s    print_jdirection
  342.  
  343. unknown_jdirection
  344.     lea    unknownstg(pc),a0
  345.  
  346. print_jdirection
  347.     moveq    #10,d0
  348.     move.l    wndwrp(pc),a1
  349.     CALLGRAF    Text
  350.  
  351. checkj_fire
  352.     move.w    #16,d0
  353.     move.w    #56,d1
  354.     move.l    wndwrp,a1
  355.     CALLGRAF Move
  356.     lea    blankstg(pc),a0
  357.     cmp.b    #124,d3
  358.     bne.s    no_fire
  359.     lea    firestg(pc),a0
  360.  
  361. no_fire
  362.     moveq    #10,d0
  363.     move.l    wndwrp(pc),a1
  364.     CALLGRAF    Text
  365.  
  366.     bra    mainloop
  367.  
  368. exit_message
  369.  
  370. exit_freemem
  371.     move.l    bytebuf(pc),a1
  372.     moveq    #FILE_SIZE,d0
  373.     CALLEXEC    FreeMem
  374.  
  375. exit_closewindow
  376.     move.l    wndwptr(pc),a0
  377.     CALLINT    CloseWindow
  378.  
  379. exit_closedos
  380.     move.l    _DOSBase(pc),a1
  381.     CALLEXEC    CloseLibrary
  382.  
  383. exit_closegfx
  384.     move.l    _GfxBase(pc),a1
  385.     CALLEXEC    CloseLibrary
  386.  
  387. exit_closeint
  388.     move.l    _IntuitionBase(pc),a1
  389.     CALLEXEC    CloseLibrary
  390.  
  391. exit_quit
  392.     moveq    #0,d0
  393.     rts
  394.  
  395.  
  396.  * Jump-To Routines.
  397.  
  398.  
  399.  * Sub-Routines.
  400.  
  401. decimal_to_ascii
  402.     divu    #1000,d1
  403.     bsr.s    do_value
  404.     divu    #100,d1
  405.     bsr.s    do_value
  406.     divu    #10,d1
  407.     bsr.s    do_value
  408.     nop
  409. do_value
  410.     add.w    #$30,d1
  411.     move.b    d1,(a0)+
  412.     clr.w    d1
  413.     swap    d1
  414.     rts
  415.  
  416.  
  417.  * Object/Module Structures.
  418.  
  419. wndwdefs
  420.     dc.w    0,0,320,100
  421.     dc.b    0,1
  422.     dc.l    IDCMP_VANILLAKEY!IDCMP_RAWKEY!IDCMP_MOUSEBUTTONS!IDCMP_DELTAMOVE!IDCMP_MOUSEMOVE!IDCMP_CLOSEWINDOW
  423.     dc.l    WFLG_NOCAREREFRESH!WFLG_SMART_REFRESH!WFLG_REPORTMOUSE!WFLG_RMBTRAP!WFLG_ACTIVATE!WFLG_CLOSEGADGET!WFLG_DRAGBAR!WFLG_DEPTHGADGET
  424.     dc.l    0,0,0,0,0
  425.     dc.w    0,0,0,0,WBENCHSCREEN
  426.  
  427.  
  428.  * Long Variables.
  429.  
  430. _IntuitionBase    dc.l    0
  431. _GfxBase    dc.l    0
  432. _DOSBase    dc.l    0
  433. _IconBase    dc.l    0
  434. vpptr        dc.l    0
  435. wndwptr        dc.l    0
  436. wndwrp        dc.l    0
  437. iclass        dc.l    0
  438. iadr        dc.l    0
  439. mouseport    dc.l    0
  440. mouseio        dc.l    0
  441. bytebuf        dc.l    0
  442.  
  443.  
  444.  * Word Variables.
  445.  
  446. icode        dc.w    0
  447. iqual        dc.w    0
  448. msex        dc.w    0
  449. msey        dc.w    0
  450.  
  451.  
  452.  * String Variables.
  453.  
  454. int_name    dc.b    'intuition.library',0
  455. graf_name    dc.b    'graphics.library',0,0
  456. dos_name    dc.b    'dos.library',0
  457. ip_name        dc.b    'input.device',0,0
  458. blankstg    dc.b    '          ',0,0
  459. firestg        dc.b    'Fire      ',0,0
  460. lmbstg        dc.b    'Left      ',0,0
  461. mmbstg        dc.b    'Middle    ',0,0
  462. rmbstg        dc.b    'Right     ',0,0
  463. unknownstg    dc.b    '          ',0,0
  464. nstg        dc.b    'North     ',0,0
  465. nestg        dc.b    'North East',0,0
  466. estg        dc.b    'East      ',0,0
  467. sestg        dc.b    'South East',0,0
  468. sstg        dc.b    'South     ',0,0
  469. swstg        dc.b    'South West',0,0
  470. wstg        dc.b    'West      ',0,0
  471. nwstg        dc.b    'North West',0,0
  472.  
  473.  
  474.  * Buffer Variables.
  475.  
  476. byte0        dcb.b    1,0
  477. byte1        dcb.b    1,1